package com.global.base;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;

public final class StringUtil extends Util {

	private StringUtil(){};
	
	private static String errorMessage;
	 
	 /**
	  * 返回错误信息
	  * @return String
	  */
	 public static String getErrorMessage(){
		 return errorMessage;
	 }
	 
	/**
	 * 将字符串按照正则表达式进行拆分，再转换为List
	 * 
	 * @param str
	 * @param regex
	 *            拆分条件（正则表达式）
	 * @return List<String>
	 */
	public static List<String> splitString(String string, String regex) {
		List<String> result = new ArrayList<String>();

		if (StringUtils.isNotBlank(string)) {
			String[] split = string.split(regex);
			if (split != null && split.length > 0) {
				result = new ArrayList<String>(split.length);
				for (String s : split) {
					result.add(s);
				}
			} else {
				result = new ArrayList<String>(0);
			}
		}

		return result;
	}

	/**
	 * 将字符串按照正则表达式进行拆分，再转换为List， 且将拆分后得到的空串过滤掉，即list中不存在空串(或者多个空格或者null)的元素
	 * 
	 * @param str
	 * @param regex
	 *            拆分条件（正则表达式）
	 * @return List<String>
	 */
	public static List<String> splitStr(String str, String regex) {
		
		List<String> result = new ArrayList<String>();

		if (StringUtils.isNotBlank(str)) {
			result = new ArrayList<String>();
			String[] split = str.split(regex);
			if (split != null && split.length > 0) {
				for (String s : split) {
					if (StringUtils.isNotBlank(s)) {
						result.add(s);
					}
				}

				if (result.size() <= 0) {
					result = null;
				}
			}
		}

		return result;
	}

	/**
	 * 将字符串按照正则表达式进行拆分，再转换为List， 且将拆分后得到的空串过滤掉，即list中不存在空串(或者多个空格或者null)的元素 <br/>
	 * 如果参数isNumberStr=true，那么在拆分后的串如果为数字形式，则去除串前后的空格、0
	 * 
	 * @param str
	 * @param regex
	 *            拆分条件（正则表达式）
	 * @param isNumberStr
	 *            true 表示拆分后的串如果为数字形式，则去除串前面的空格、0
	 * @return
	 */
	public static List<String> splitStr(String str, String regex, boolean isNumberStr) {

		List<String> result = new ArrayList<String>();

		if (StringUtils.isNotBlank(str)) {
			result = new ArrayList<String>();
			String[] split = str.split(regex);
			if (split != null && split.length > 0) {
				for (String s : split) {
					if (StringUtils.isNotBlank(s)) {
						if (isNumberStr && NumberUtil.isNumberPattern(s)) {
							s = StringUtils.strip(s, "0|\"\"");
						}
						result.add(s);
					}
				}

				if (result.size() <= 0) {
					result = null;
				}
			}
		}

		return result;
	}

	/**
	 * 将消息数组转换成带分段符号（\n）的字符串
	 * <br/>
	 * <br/><span style="color:red">用于消息输出</span>
	 * @param messageList
	 * @return 分段后的字符串
	 */
	public static String getString(List<String> messageList){				
		return getString(messageList, null);
	}
	
	/**
	 * 将消息数组转换成带分段符号（如：\n 或者 <br/>）的字符串
	 * <br/>
	 * <br/><span style="color:red">用于消息输出</span>
	 * @param messageList
	 * @return 分段后的字符串
	 */
	public static String getString(List<String> messageList, String splitStr){
		StringBuffer sb = new StringBuffer();
		if(StringUtils.isBlank(splitStr)){
			splitStr = "\n";
		}
		if(messageList!=null && !messageList.isEmpty()){
			for(int i=0; i<messageList.size()-1; i++){
				String s = messageList.get(i);
				sb.append(s);
				sb.append(splitStr);
			}
			sb.append(messageList.get(messageList.size()-1));
		}
		
		return (messageList!=null ? sb.toString() : "");
	}
	
    /**
     * 获取栏位的key-value
     * @param key
     * @param value
     * @return
     */
    public static String getValueStr(Object value){
    	
    	errorMessage = "";
    	String valueStr = "";
    	
    	if(value!=null){
    		if(value instanceof java.lang.String){
    			valueStr = String.valueOf(value); 
    		}else if(value instanceof java.util.Date){
    			Date newDate = (Date)value;
    			valueStr = DateUtil.getDateToStr(newDate, "yyyy/MM/dd HH:mm:ss");
    			errorMessage = DateUtil.getErrorMessage();
    		}else if(value instanceof java.sql.Date){
    			java.sql.Date newDate = (java.sql.Date)value;
    			valueStr = DateUtil.getDateToStr(newDate, "yyyy/MM/dd HH:mm:ss");
    			errorMessage = DateUtil.getErrorMessage();
    		}else if(value instanceof java.sql.Timestamp){
    			java.sql.Timestamp timestamp = (java.sql.Timestamp)value;
    			valueStr = DateUtil.getTimestampToStr(timestamp, "yyyy/MM/dd HH:mm:ss.SSS");
    			errorMessage = DateUtil.getErrorMessage();
    		}else if(value instanceof java.sql.Time){
    			java.sql.Time time = (java.sql.Time)value;
    			valueStr = DateUtil.getTimeToStr(time, "yyyy/MM/dd HH:mm:ss.SSS");
    			errorMessage = DateUtil.getErrorMessage();
    		}else if(value instanceof Long || value instanceof Integer){    			
    			valueStr = String.valueOf(value);
    		}else if(value instanceof Double || value instanceof Float){    			
    			valueStr = NumberUtil.getNumberFormatStr((Double)value, 2);
    		}else{
    			valueStr = String.valueOf(value);
    		}
    	}
    	
    	return valueStr;
    }
    
    public static void main(String[] args){
    	System.out.println(StringUtil.getValueStr(new Date()));
    }
}
